package com.qiyu.wakaka.common.utils;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

public class DateRandomUtil {
    
    /**
     * 生成随机时间
     * 
     * @param beginDate
     * @param endDate
     * @return
     */
    public static Date randomDate(String beginDate, String endDate) {
        try {
            SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
            Date start = format.parse(beginDate);// 构造开始日期
            Date end = format.parse(endDate);// 构造结束日期
            // getTime()表示返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数。
            if (start.getTime() >= end.getTime()) {
                return null;
            }
            long date = random(start.getTime(), end.getTime());
            return new Date(date);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    public static long random(long begin, long end) {
        long rtn = begin + (long) (Math.random() * (end - begin));
        // 如果返回的是开始时间和结束时间，则递归调用本函数查找随机值
        if (rtn == begin || rtn == end) {
            return random(begin, end);
        }
        return rtn;
    }

    public static String randomDate(){
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Boolean flag = false;
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(new Date());
        String end = format.format(calendar.getTime());
        calendar.add(Calendar.DAY_OF_MONTH,-15);
        String begin = format.format(calendar.getTime());
        Calendar cal = Calendar.getInstance();// 当前日期
        do {
            Date randomDate = randomDate(begin, end);
            cal.setTime(randomDate);
            int hour = cal.get(Calendar.HOUR_OF_DAY);// 获取小时
            int minute = cal.get(Calendar.MINUTE);// 获取分钟
            int minuteOfDay = hour * 60 + minute;// 从0:00分开是到目前为止的分钟数
            final int s = 0* 60 + 20;// 起始时间 00:20的分钟数
            final int e = 8 * 60;// 结束时间 8:00的分钟数
            if (minuteOfDay >= s && minuteOfDay <= e) {
                flag = true;
            } else {
                flag = false;
                String result = format.format(randomDate);
                return result;
            }
        }while (flag);
        return "";
    }
    
    public static void main(String[] args) {
        System.out.println(randomDate());
    }
}